DataBase
NOTE
DBeaver 접속 이슈, MyBatis DB 연결 설정, SQL 작성 방법 정리.
DB 엔진
아래 XML 예제의
LIMIT 1은 MySQL/MariaDB 전용 문법이다. Oracle이라면WHERE ROWNUM = 1또는FETCH FIRST 1 ROWS ONLY를 사용해야 한다.
📌 개념
DB Client — DBeaver 드라이버 인증 문제
- authentication 오류 발생 시 host 대신 URL로 DB 접속하면 원만히 해결됨(DBeaver의 인증 처리 과정에서 실패하는 것으로 추측).
DB Connect (Sql Mapper) — MyBatis 사용
- mapper xml 파일을 스프링부트에 인지시키기
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
Resource[] arrResource = new PathMatchingResourcePatternResolver()
.getResources("classpath:mapper/**/*Mapper.xml");
sqlSessionFactoryBean.setMapperLocations(arrResource);
sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
return sqlSessionFactoryBean.getObject();
}- mybatis 의존성 추가
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2'- mybatis 학습
- xml 에 적는 쿼리문 id가 repository의 함수명 (repository의 경우 인터페이스로 작성)
- param 값과 return 값의 타입 제시
sql 작성방법
- where 작성시 1=1 (참) 입력
SELECT *
FROM CHARGER
WHERE 1=1
AND firstcharger = 'yes'
AND id = '1'
--AND pass = '2'- 기능상에서는 무조건 참이기에 의미는 없으나, 주석처리하기 편함(디버깅의 이점)
- param의 정보를 가져다 쓸때에는, 저장되어있는 #{변수명} 으로 작성
WHERE CARD_NO = #{rfid} AND USETYPE = 'USED'- 단,
<if>문이나 mybatis가 제공하는 제어문안에서는 그냥 작성
<select id="authorizeCheck" parameterType="map" resultType="map">
SELECT ID, USETYPE
FROM CUSTOMER CTM
WHERE 1=1
<if test=" rfid != null and rfid != '' ">
AND CARD_NO = #{rfid}
</if>
<if test=" dong != null and dong != '' and guyeok != null and guyeok != ''">
AND DONG = #{dong} AND GUYEOK = #{guyeok}
</if>
<if test=" password != null and password != '' ">
AND PASSWORD = #{password}
</if>
ORDER BY ID DESC
LIMIT 1
</select>- DDL의 경우 (create, drop, alter 등)
- spring이 제공하는 schema.sql 을 사용하여 직접 작성
- 또는, .sql 스크립트를 만들어서 database client에 직접 sql 작성
- 관계 설정도 sql구문을 통해서 설정 및 기본키/외래키도 sql구문으로 작성
- mybatis의 경우 CRUD만 주로 이용한다.